package dados.curso;
import java.io.Serializable;

import negocio.curso.Curso;


public class RepositorioCursosArray implements Serializable{
	private Curso[] cursos;
	private int indice;
	private final static int tamanhoCache = 100;
	
	public RepositorioCursosArray() {
		  indice = 0;
		  cursos = new Curso[tamanhoCache];
	}
	
	public Curso[] getCursos() {
		return cursos;
	}
	
	public int getIndice() {
	       return indice;
	}
	
	public int procurarIndice(String codigo) throws CursoNaoExistenteException{
		int indice=0;
		boolean achou = false;
		for (Curso curso : cursos) {
			if (curso != null && curso.getCodigo().equals(codigo)) {
				achou = true;
				break;
			}
			else {
				indice++;
			}
		}
		if (achou) {
			return indice;
		} 
		else {
			throw new CursoNaoExistenteException(codigo);
		}
	}
	
	public void atualizar(Curso curso) throws CursoNaoExistenteException{
		int i = procurarIndice(curso.getCodigo());
		cursos[i] = curso;
	}
	
	public void inserir(Curso curso) throws CursosSemCapacidadeArmazenamentoException{
		
		if (indice < tamanhoCache) {
			cursos[indice] = curso;
			indice++;
		} else {
			throw new CursosSemCapacidadeArmazenamentoException();
		}	
	}
	
	public void inserirLista(Curso curso){
		if (indice < tamanhoCache) {
			cursos[indice] = curso;
			indice++;
		}	
	}
	
	public Curso procurar(String codigo) throws CursoNaoExistenteException{
		Curso c;
		int i = this.procurarIndice(codigo);
		c = cursos[i];
		return c;	
	}
	
	public void descadastrar(Curso curso) throws CursoNaoExistenteException{
		int i = procurarIndice(curso.getCodigo());
		cursos[i] = cursos[indice - 1];
		cursos[indice - 1] = null;
		indice--;
	}
	
	public boolean existe(String codigo) {
		boolean resposta;
		
		try {
			procurarIndice(codigo);
			resposta = true;
		} catch (CursoNaoExistenteException e) {
			resposta = false;
		}
		return resposta;
	}
}
